package com.caregiver.watch.business.notice.dao;

import com.caregiver.watch.business.notice.model.po.JPushUserBinding;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 极光推送用户设备绑定关系数据访问接口
 */
@Mapper
public interface JPushUserBindingDao {
    
    /**
     * 插入新的用户设备绑定记录
     * @param binding 绑定信息
     * @return 影响行数
     */
    int insert(JPushUserBinding binding);
    
    /**
     * 根据ID更新绑定记录
     * @param binding 绑定信息
     * @return 影响行数
     */
    int updateById(JPushUserBinding binding);
    
    /**
     * 根据ID删除绑定记录
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteById(Long id);
    
    /**
     * 根据ID查询绑定记录
     * @param id 主键ID
     * @return 绑定记录
     */
    JPushUserBinding selectById(Long id);
    
    /**
     * 根据用户ID查询所有有效的绑定记录
     * @param userId 用户ID
     * @return 绑定记录列表
     */
    List<JPushUserBinding> selectByUserId(@Param("userId") String userId);
    
    /**
     * 根据注册ID查询绑定记录
     * @param registrationId 注册ID
     * @return 绑定记录
     */
    JPushUserBinding selectByRegistrationId(@Param("registrationId") String registrationId);
    
    /**
     * 根据注册ID和有效状态查询绑定记录
     * @param registrationId 注册ID
     * @return 绑定记录
     */
    JPushUserBinding selectByRegistrationIdAndActive(@Param("registrationId") String registrationId);
    
    /**
     * 查询所有有效的绑定记录
     * @return 绑定记录列表
     */
    List<JPushUserBinding> selectAllActive();

    /**
     * 根据注册ID删除绑定记录
     * @param registrationId 注册ID
     * @return 影响行数
     */
    int deleteByRegistrationId(@Param("registrationId") String registrationId);

    /**
     * 根据注册ID删除绑定记录
     * @param userId 用户ID
     * @return 影响行数
     */
    int deleteByUserId(@Param("userId") Long userId);
}
